home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Oh!X 2001 Spring
/
Oh!X 2001 Spring Special CD-ROM (Japan).7z
/
Oh!X 2001 Spring Special CD-ROM (Japan) (Track 1).bin
/
GALAXY
/
ohx5-2
/
ohx5_2.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
2001-01-02
|
6KB
|
225 lines
//
// ohx5_2.cpp
//
//
//
/*--------------------------------------- ヘッダーファイル&マクロ定義 ------------------------*/
#define STRICT
#include "stdafx.h"
#define EXT
#include "ohx5_2.h"
char application_name[] = "OhX-5 GalaxyKnights sample";
// このコード モジュールに含まれる関数の前宣言:
ATOM MyRegisterClass( HINSTANCE hInstance );
BOOL InitInstance( HINSTANCE, int );
LRESULT CALLBACK main_window_proc( HWND, UINT, UINT, LONG );
LRESULT CALLBACK About( HWND, UINT, WPARAM, LPARAM );
LRESULT CALLBACK IPcon( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam );
/*------------------------------- 外部変数 --------------------------------------------*/
/*------------------------------- 本体コーディング ------------------------------------------*/
/*
メインウインドウを取得して、属性を与える
*/
bool init_window( HINSTANCE hInst,int cmdshow )
{
WNDCLASS wndclass;
hInstApp = hInst;
// ウインドウ・クラス作成(詳細はWindowsAPIに関する各資料を参照してください)
wndclass.style = CS_BYTEALIGNCLIENT|CS_HREDRAW|CS_VREDRAW; // ウインドウのスタイル定義(サイズ変更時の再描画、BYTEアライメント調整)
wndclass.lpfnWndProc = (WNDPROC)main_window_proc; // メインウインドウのイベント処理プロシジャ
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInst;
wndclass.hIcon = NULL;
wndclass.hCursor = LoadCursor(NULL,IDC_ARROW);
wndclass.hbrBackground = (HBRUSH)GetStockObject(BLACK_BRUSH);
wndclass.lpszMenuName = MAKEINTRESOURCE(IDC_OHX4);
wndclass.lpszClassName = application_name;
// ウインドウ・クラスの登録
if( !RegisterClass( &wndclass ) ){ return false; }
// メインウインドウの確保
hwndApp = CreateWindowEx(
WS_EX_CLIENTEDGE,
application_name,
application_name,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,CW_USEDEFAULT,640,480,
(HWND)NULL,
(HMENU)NULL,
hInst,
(LPSTR)NULL );
ShowWindow( hwndApp, cmdshow );
UpdateWindow( hwndApp );
return true;
}
/*-------------------------------------------
ウィンドウ処理
--------------------------------------------*/
LRESULT CALLBACK main_window_proc(HWND handle,UINT msg,UINT window_param,LONG param2 )
{
switch(msg){
case WM_ACTIVATE:
switch( window_param ){
case WA_ACTIVE:
restart_draw();
break;
case WA_CLICKACTIVE:
case WA_INACTIVE:
pause_draw();
break;
}
break;
case WM_ACTIVATEAPP: // アプリケーションの状態に合わせて動作を制御する
if ((BOOL)window_param ) restart_draw(); else pause_draw();
break;
case WM_KEYDOWN:
switch( window_param ){
case VK_ESCAPE:
DestroyWindow( handle );
break;
default:
break;
}
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
case WM_ENTERMENULOOP: // メニューが選択されたら動作を停止する
pause_draw();
break;
case WM_COMMAND: // 選択されたメニューを実行
switch( window_param ){
case IDM_EXIT:
DestroyWindow( handle );
break;
case IDC_CONNECT:
if( multiplayer ){
DialogBox( hInst,(LPCTSTR)IDD_ALREADY, handle,(DLGPROC)About );
break;
}
connect_player( handle );
break;
case IDC_DISCONNECT:
if( multiplayer ){
disconnect_player( handle );
break;
}
DialogBox( hInst,(LPCTSTR)IDD_NOCONNECT, handle,(DLGPROC)About );
break;
case IDM_ABOUT:
DialogBox(hInst, (LPCTSTR)IDD_ABOUTBOX, handle, (DLGPROC)About);
break;
}
break;
case WM_EXITMENULOOP: // メニューの選択が解除されたら動作を再開する
restart_draw();
break;
default:
return DefWindowProc( handle,msg,window_param,param2 );
}
return 0L;
}
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow )
{
MSG msg;
HACCEL hAccelTable;
// アプリケーションの初期化を行います:
if( !init_window( hInstance, nCmdShow ) ) { return false; }
hAccelTable = LoadAccelerators(hInstance, (LPCTSTR)IDC_OHX4);
if( !init_input() ){ return false; }
if( !init_D3DX() ){ return false; }
if( !start_D3DX() ){ return false; }
init_shapes(); // 形状初期化
init_objects(); // 3Dマップ初期化
init_directplay(); // 通信機能初期化
init_player(); // プレイヤーステータス初期化
// メイン メッセージ ループ:
msg.wParam = 0;
while( 1 ){
if (PeekMessage(&msg,0,0,0,PM_REMOVE)) {
if (msg.message == WM_QUIT)
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
} else {
if( !realtime_render() ) PostQuitMessage(0);
player_drive();
}
}
release_directplay(); // DirectPlay 終了処理
release_objects(); // オブジェクト解放
release_shapes(); // 3D物体解放
release_input(); // DirectInput解放
release_D3DX(); // Direct3DXの終了処理
end_application(); // アプリケーションの終了処理
return msg.wParam;
}
// バージョン情報ボックス用メッセージ ハンドラ
LRESULT CALLBACK About( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{
switch( message )
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if( LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL )
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}
// バージョン情報ボックス用メッセージ ハンドラ
LRESULT CALLBACK IPcon( HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam )
{
switch( message )
{
case WM_INITDIALOG:
return TRUE;
case WM_COMMAND:
if( LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL )
{
EndDialog(hDlg, LOWORD(wParam));
return TRUE;
}
break;
}
return FALSE;
}